到目前為止,我們已經學會了變數、資料型別、運算子、條件判斷與迴圈,能寫出小型的程式。但如果要處理更複雜的需求,例如隨機數、日期時間、數學計算,甚至是網路請求,就不必自己從零開始。Python 已經幫我們準備了許多 模組(Module),就像一個工具箱,隨時可以拿來使用。
在程式設計的世界裡:
透過 import
,我們可以直接把這些工具搬進程式裡使用,大幅減少重複造輪子的時間。除了 Python 內建的標準模組,還能安裝社群開發的第三方模組,甚至自己寫模組來重複利用。
今天的目標是:
import
的各種方式。math
、random
、datetime
、os
)。pip install
)。換句話說,今天會讓我們學會「善用別人寫好的工具」,讓程式不只會重複運算,還能真正變得強大又方便。
.py
),裡面定義了變數、函式、類別,可以被其他程式載入使用。類型 | 說明 | 範例 | 取得方式 |
---|---|---|---|
標準模組 | Python 官方內建 | math , random , datetime |
直接使用 |
第三方模組 | 社群開發,需安裝 | requests , numpy , openai |
pip install |
自訂模組 | 自己撰寫的檔案 | tools.py , config.py |
同專案資料夾 |
import math
print(math.sqrt(25)) # 開根號 ➜ 5.0
print(math.pi) # 圓周率 ➜ 3.14159...
import math as m
print(m.sqrt(16)) # 4.0
print(m.ceil(3.14)) # 4 (無條件進位)
好處:縮短命名、方便閱讀,尤其對於長模組名很有用。
from math import sqrt, pi, ceil
print(sqrt(16)) # 4.0 (不用寫 math.sqrt)
print(pi) # 3.141592653589793
print(ceil(3.14)) # 4
優點:不用加 模組名稱.
前綴
風險:容易與自己變數重名,需小心命名衝突
from math import *
print(sin(pi / 2)) # 1.0
為什麼不建議?
import math
# 基本運算
print(math.sqrt(25)) # 開根號 ➜ 5.0
print(math.pow(2, 3)) # 2的3次方 ➜ 8.0
print(math.ceil(3.14)) # 無條件進位 ➜ 4
print(math.floor(3.99)) # 無條件捨去 ➜ 3
# 常數
print(math.pi) # 圓周率
print(math.e) # 自然對數底
import random
# 隨機整數和浮點數
print(random.randint(1, 10)) # 1-10 的隨機整數
print(random.random()) # 0-1 的隨機浮點數
# 隨機選擇
colors = ['red', 'blue', 'green']
print(random.choice(colors)) # 隨機選一個顏色
# 打亂清單
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers) # 被打亂的清單
from datetime import datetime, date
# 取得現在時間
now = datetime.now()
print(f"現在時間: {now}")
print(f"格式化: {now.strftime('%Y-%m-%d %H:%M:%S')}")
# 只處理日期
today = date.today()
print(f"今天: {today}")
print(f"年份: {today.year}")
import os
# 檔案和目錄操作
print(f"目前工作目錄: {os.getcwd()}")
print(f"目錄內容: {os.listdir('.')}")
# 檢查檔案是否存在
print(f"檔案是否存在: {os.path.exists('test.txt')}")
假設你有一個檔案叫 tools.py
:
# tools.py
def greet(name):
return f"Hello, {name}!"
def add(x, y):
return x + y
# 模組常數
VERSION = "1.0"
# main.py
import tools
# 使用模組函式
print(tools.greet("Alice")) # Hello, Alice!
print(tools.add(3, 5)) # 8
print(f"版本: {tools.VERSION}")
或者:
from tools import greet, add
print(greet("Bob")) # Hello, Bob!
print(add(10, 20)) # 30
# 基本安裝
pip install requests
# 安裝特定版本
pip install requests==2.28.0
# 升級套件
pip install --upgrade requests
import requests
# 發送 HTTP 請求
response = requests.get("https://httpbin.org/get")
print(f"狀態碼: {response.status_code}")
print(f"回應內容: {response.text}")
寫法 | 使用方式 | 優點 | 缺點 |
---|---|---|---|
import math |
math.sqrt(25) |
清楚來源 | 需要前綴 |
import math as m |
m.sqrt(25) |
簡短易讀 | 需記住別名 |
from math import sqrt |
sqrt(25) |
直接使用 | 可能重名 |
from math import * |
sqrt(25) |
最簡潔 | 不推薦 |
錯誤類型 | 錯誤訊息 | 可能原因 | 解決方法 |
---|---|---|---|
ModuleNotFoundError | No module named 'xxx' |
模組未安裝 | 使用 pip install xxx |
ImportError | cannot import name 'xxx' |
函式名稱錯誤 | 檢查函式名稱拼字 |
AttributeError | module has no attribute 'xxx' |
屬性不存在 | 使用 dir() 檢查可用屬性 |
# 檢查模組有哪些功能
import math
print(dir(math)) # 列出所有可用功能
# 檢查模組是否已安裝
try:
import requests
print("requests 已安裝")
except ImportError:
print("requests 未安裝")
import math
radius = float(input("請輸入圓的半徑: "))
area = math.pi * radius ** 2
print(f"圓面積是: {area:.2f}")
import random
import string
def generate_password(length=8):
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(length))
password = generate_password(12)
print(f"隨機密碼: {password}")
建立 mytools.py
:
# mytools.py
def celsius_to_fahrenheit(celsius):
"""攝氏轉華氏"""
return celsius * 9/5 + 32
def is_even(number):
"""檢查是否為偶數"""
return number % 2 == 0
使用:
import mytools
temp_f = mytools.celsius_to_fahrenheit(25)
print(f"25°C = {temp_f}°F")
print(f"4是偶數嗎? {mytools.is_even(4)}")
# 1. 標準函式庫
import os
import sys
from datetime import datetime
# 2. 第三方套件
import requests
import numpy as np
# 3. 自訂模組
from myproject import settings
import mytools
# 好的做法
import numpy as np # 標準縮寫
import pandas as pd # 標準縮寫
import matplotlib.pyplot as plt # 標準縮寫
# 避免的做法
import numpy as n # 不清楚的縮寫
from math import * # 污染命名空間
學會 import 後,你就準備好學習:
import asyncio
import openai
、from langchain import ...
import pandas as pd
、import numpy as np
from flask import Flask
這些都建立在今天學的 import 基礎上!